跳到主要内容

使用 wireguard 搭建混合云组网

WireGuard 是一种简单、快速且安全的 VPN 解决方案,可以用来搭建混合云组网。下面是一般步骤来设置 WireGuard 用于混合云组网。

安装 WireGuard

在所有需要通信的服务器上安装 WireGuard。安装方法取决于你的操作系统,例如在 Ubuntu 上,你可以运行:

sudo apt update
sudo apt install wireguard

内核问题

需要安装版本高于 5.6 的内核

# 添加 PPA:
sudo add-apt-repository ppa:canonical-kernel-team/unstable
sudo apt update

# 安装新内核
sudo apt install linux-generic-lts-<版本号>

如果你不能升级内核,你可以尝试安装 WireGuard 的 DKMS(动态内核模块支持)版本,这将为你的当前内核版本编译和安装 WireGuard 模块。

1、安装必要的软件包:

sudo apt install software-properties-common

1、添加 WireGuard PPA:

sudo add-apt-repository ppa:wireguard/wireguard

2、更新软件包列表并安装 WireGuard:

sudo apt update
sudo apt install wireguard-dkms wireguard-tools

这将为你的现有内核版本编译并安装 WireGuard 模块。

配置 WireGuard

1、生成密钥对:在每台服务器上,运行以下命令来生成公钥和私钥。

wg genkey | tee privatekey | wg pubkey > publickey

2、配置服务器:选择一个服务器作为 WireGuard 的服务器。创建一个配置文件 /etc/wireguard/wg0.conf 并填入以下内容:

[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = <服务器私钥>
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
PublicKey = <客户端1公钥>
AllowedIPs = 10.0.0.2/32

[Peer]
PublicKey = <客户端2公钥>
AllowedIPs = 10.0.0.3/32

替换 <服务器私钥><客户端1公钥><客户端2公钥> 为相应的值。

3、配置客户端:在每台客户端服务器上,创建一个配置文件 /etc/wireguard/wg0.conf 并填入以下内容:

[Interface]
Address = 10.0.0.2/32
PrivateKey = <客户端私钥>
DNS = 10.0.0.1

[Peer]
PublicKey = <服务器公钥>
Endpoint = <服务器IP地址>:51820
AllowedIPs = 0.0.0.0/0

替换 <客户端私钥><服务器公钥><服务器IP地址> 为相应的值。

启动 WireGuard

在服务器和客户端上,运行以下命令来启动 WireGuard:

sudo wg-quick up wg0

要让 WireGuard 在系统启动时自动运行,可以使用:

sudo systemctl enable wg-quick@wg0

测试连接

在客户端上,尝试ping服务器的 WireGuard 地址:

ping 10.0.0.1

如果一切配置正确,你应该能够看到 ping 响应。

以上步骤仅为基本的 WireGuard 混合云组网配置。根据你的具体需求,可能还需要进一步的配置和调整,例如设置路由规则、防火墙规则等。

错误处理

报错“Device "wg0" does not exist.”意味着系统中不存在名为“wg0”的网络接口。这通常发生在尝试关闭或配置不存在的 WireGuard 接口时。

要解决这个问题,你可以按照以下步骤操作:

1、确保 WireGuard 已正确安装

首先,确保你已经在系统上正确安装了 WireGuard。

2、创建 WireGuard 接口

你可以通过运行以下命令来创建一个新的 WireGuard 接口:

sudo ip link add dev wg0 type wireguard

3、配置 WireGuard 接口

在创建了 WireGuard 接口之后,你需要为其分配私钥并进行其他必要的配置:

sudo wg set wg0 private-key /path/to/privatekey
sudo ip address add 192.168.1.1/24 dev wg0
sudo ip link set wg0 up

请确保你将 /path/to/privatekey 替换为私钥文件的实际路径,并根据需要调整 IP 地址。

4、测试接口

现在,你应该能够看到新创建的 wg0 接口:

ip addr show dev wg0

5、配置 WireGuard 连接

最后,你需要编辑 WireGuard 配置文件(通常位于 /etc/wireguard/wg0.conf),并添加必要的 Peer 信息。然后,你可以使用 wg-quick 来管理 WireGuard 接口:

sudo wg-quick up wg0

这应该会启动 wg0 接口并应用你在配置文件中指定的设置。

6、检查状态

要查看 WireGuard 接口的状态,你可以使用:

sudo wg show

这应该会显示关于 wg0 接口的信息,包括其公钥、私钥(显示为 (hidden))、连接的 peers 以及相关的网络设置。

检查当前的 wg

遇到个很奇怪的问题,每次启动都报错下面这个

[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 192.168.1.1 dev wg0
[#] ip link set mtu 1420 up dev wg0
RTNETLINK answers: Address already in use
[#] ip link delete dev wg0

所以很奇怪,所以 sudo wg show 发现 K3s 的 flannel 已经配置了一个网络了,所以要避开这个网段,以及这个端口 51820

interface: flannel-wg
public key: xxxxxxxxxxxxxxxxxxxx
private key: (hidden)
listening port: 51820

peer: iTR00/xxxxxxxxxx
endpoint: xxxxxxxxxx
allowed ips: xxxxxxxxxx/24
latest handshake: 1 minute, 37 seconds ago
transfer: 301.61 KiB received, 161.82 KiB sent
persistent keepalive: every 25 seconds

删掉某个 wg 配置

sudo wg-quick down wg0